#include<stdio.h>
#include<signal.h>
#include<iostream>
#include<unistd.h>
using namespace std;
void showBlock(sigset_t *oset)
{
	int signo = 1;
	for(;signo <= 31; signo++)
	{
		//判断信号集中2号信号是否是有效信号
		if(sigismember(oset,signo)) cout << "1";
		else cout << "0";
	}
	cout << endl;
}
int main()
{
	//只是在用户层面上进行设置
	sigset_t set,oset;
	sigemptyset(&set);
	sigemptyset(&oset);
	sigaddset(&set,2);//将2号信号设置进信号集中

	//谁调用sigprocmask函数，就设置谁
	//读取或更改信号屏蔽字(阻塞信号集)
	sigprocmask(SIG_SETMASK,&set,&oset);
	int cnt = 0;
	while(true)
	{
		showBlock(&oset);
        showBlock(&set);
		sleep(1);
		cnt++;
		
		if(cnt == 10)
		{
			//恢复2号信号，即解除对2号信号的屏蔽
			cout << "recover block" << endl;
			sigprocmask(SIG_SETMASK,&oset,&set);
			showBlock(&set);
            showBlock(&oset);
		}
	}
}
